Hypothesis 1: Discordance is a relatively common, yet under appreciated phenomenon, and varies by geographic location of care and patient attributes including demographics, severity of illness, and underlying disease process.
Hypothesis 2: Discordance between aPTT and anti-Xa indicates the presence of coagulation system pathophysiology which is a risk factor for development of hemorrhage and thrombosis.
Classic systemic anticoagulation goals, anti-Xa vs aPTT, at NYP:
Typical anti-Xa goal vs aPTT goals among heparinized ECMO patients:
0.1 - 0.3 vs 35 - 50 (LOW GOAL)
0.2 - 0.5 vs 45 - 65 (CLASSIC GOAL)
Only first ECMO run used.
ECMO duration: Dr. Connie Nguyen manually reviewed heparin-exposed patients’ EMRs in June 2025 to identify true ECMO time off, as initial data review identified some labs that were drawn while on heparin but after the patient was off ECMO. The variable “time_off” in the original data was obtained from ELSO sources. Per Dr. Nguyen’s review, if her evaluation of ECMO stop time was within 4 hours of ELSO-derived time_off, then the actual true time off was deemed as that known by ELSO. If there was a greater than 4 hour discrepancy, a new time_off_true value was recorded.
Lab cutoffs:
if aPTT <20.0 - made 0
if aPTT >180 - made 180
if anti-Xa <0.04 or <0.1 - made 0
if anti-Xa >2.00 - made 2.0
if data is duplicated at a specific timepoint (e.g. 2 lab samples, exact same result time but different values), then taking the mean of the two exact same-timed values
Hyperbilirubinemia can artifactually elevate anti-Xa (colorimetric assay). Jaundice threshold is 2 - 3 mg/dL total bilirubin. Upper limit of normal total bilirubin at NYP-CUIMC is 1.2 mg/dL.
Bilirubin is measured in separate tubes compared to aPTT, anti-Xa,
INR, and fibrinogen. As hyperbilirubinemia can impact assessment of
anti-Xa but also may not change rapidly from one moment to another, we
accounted for total bilirubin by computing the
nearest_bilirubin value within 24 hours of any aPTT. (aPTT
chosen as it was the most frequently measured coagulation lab).
COMPLICATIONS: all complications reviewed were documented during ECMO duration, with exception of clinically significant bleeding and thrombotic complications which were manually assessed by Connie and Phil as follows:
DVT/PE_1_time_and_date
DVT/PE_2_time_and_date
DVT/PE_3_time_and_date
DVT/PE_4_time_and_date
Ischemic_stroke_1_time_and_date
Ischemic_stroke_2_time_and_date
Ischemic_stroke_3_time_and_date
Acute_limb_ischemia_1_time_and_date
Acute_limb_ischemia_2_time_and_date
Acute_limb_ischemia_3_time_and_date
GI bleeding - present on CTA and confirmed via endoscopy
ICH - based on imaging findings
| n |
|---|
| 165 |
| department_name | n |
|---|---|
| MIL 5 CTICU | 76 |
| MIL 5 CCU | 41 |
| MIL 4 MICU A | 31 |
| HRT CARDIAC CARE | 25 |
| MIL OPERATING ROOM | 5 |
| MIL 4 SICU | 1 |
| MIL CARDIAC CATH | 1 |
| GBG 4 W CT ICU | 1 |
| n |
|---|
| 113 |
| department_name | n |
|---|---|
| MIL 5 CTICU | 56 |
| MIL 5 CCU | 31 |
| HRT CARDIAC CARE | 22 |
| MIL 4 MICU A | 6 |
| MIL 4 SICU | 1 |
| MIL OPERATING ROOM | 1 |
| MIL CARDIAC CATH | 1 |
| GBG 4 W CT ICU | 1 |
## # A tibble: 1 × 1
## correlation
## <dbl>
## 1 0.740
This fits a second degree polynomial on aPTT and accounts for repeated measures per patient (i.e. multiple labs per individual patient) by including a random intercept for each patient. This is important as the repeated measures per patient are not independent - the labs are dependent on the baseline values (and the baseline anti-Xa between patients who have the same aPTT may not be the same, or vice versa).
97.5% prediction interval chosen to balance sensitivity and specificity.
## Warning in geom_point(data = model_fit_data, aes(x =
## activated_partial_thromboplastin_time, : Ignoring unknown aesthetics: text
|
|
## Adding missing grouping variables: `mrn`, `lab_result_time`
| mrn | lab_result_time | activated_partial_thromboplastin_time | heparin_assay_quantitative |
|---|---|---|---|
| 1001491594 | 2024-08-24 22:45:00 | 96.9 | 0.36 |
| 1006905710 | 2024-10-10 18:02:00 | 71.3 | 0.07 |
| 1006905710 | 2024-10-11 06:23:00 | 56.2 | 0.16 |
| 1007129753 | 2024-04-13 18:00:00 | 45.2 | 0.10 |
| 1010147999 | 2024-02-20 18:35:00 | 60.3 | 0.10 |
| 1010147999 | 2024-02-21 12:35:00 | 52.6 | 0.10 |
| 1011043983 | 2024-06-17 17:05:00 | 75.4 | 0.33 |
| 1011043983 | 2024-06-17 22:39:00 | 93.2 | 0.37 |
| 1011043983 | 2024-06-18 04:34:00 | 93.8 | 0.36 |
| 1011043983 | 2024-06-18 09:40:00 | 106.5 | 0.40 |
| 1011043983 | 2024-06-18 16:00:00 | 103.4 | 0.43 |
| 1011043983 | 2024-06-18 22:46:00 | 89.5 | 0.37 |
| 1011043983 | 2024-06-19 05:51:00 | 106.0 | 0.43 |
| 1011043983 | 2024-06-19 11:46:00 | 122.7 | 0.46 |
| 1011043983 | 2024-06-20 11:59:00 | 104.6 | 0.48 |
| 1011077110 | 2024-05-20 06:06:00 | 58.1 | 0.14 |
| 1011077110 | 2024-05-21 06:42:00 | 70.1 | 0.23 |
| 1100547209 | 2024-05-02 14:06:00 | 119.4 | 0.60 |
| 1400032239 | 2024-03-18 23:46:00 | 45.6 | 0.10 |
| 1400969240 | 2024-10-13 23:20:00 | 39.7 | 0.05 |
| 1401183967 | 2024-03-30 18:34:00 | 102.0 | 0.30 |
| 1401327774 | 2024-11-03 03:56:00 | 122.1 | 0.38 |
| 1401327774 | 2024-11-03 11:13:00 | 94.3 | 0.38 |
| 1401327774 | 2024-11-03 19:02:00 | 63.2 | 0.22 |
| 1401639110 | 2024-08-20 06:59:00 | 64.4 | 0.16 |
## Adding missing grouping variables: `mrn`, `lab_result_time`
## # A tibble: 1 × 2
## mean_aptt mean_antiXa
## <dbl> <dbl>
## 1 82.3 0.283
## Adding missing grouping variables: `mrn`, `lab_result_time`
| mrn | lab_result_time | activated_partial_thromboplastin_time | heparin_assay_quantitative |
|---|---|---|---|
| 1001491594 | 2024-08-20 04:09:00 | 41.8 | 0.47 |
| 1001491594 | 2024-08-20 10:16:00 | 55.3 | 0.59 |
| 1001491594 | 2024-08-20 21:41:00 | 61.2 | 0.67 |
| 1001491594 | 2024-08-21 05:17:00 | 66.8 | 0.74 |
| 1001491594 | 2024-08-22 09:33:00 | 46.4 | 0.43 |
| 1003642179 | 2024-01-12 05:15:00 | 63.9 | 0.56 |
| 1009544965 | 2024-01-31 14:58:00 | 98.6 | 0.90 |
| 1009544965 | 2024-02-01 01:05:00 | 92.9 | 0.80 |
| 1009544965 | 2024-02-01 17:11:00 | 68.1 | 0.60 |
| 1009544965 | 2024-02-02 00:55:00 | 57.2 | 0.50 |
| 1010696012 | 2024-04-01 03:44:00 | 44.3 | 0.40 |
| 1010696012 | 2024-04-01 09:37:00 | 46.2 | 0.40 |
| 1101397979 | 2024-02-23 22:03:00 | 170.7 | 1.70 |
| 1101397979 | 2024-02-28 12:44:00 | 55.8 | 0.50 |
| 1102216636 | 2024-08-29 04:04:00 | 67.8 | 0.62 |
| 1201555171 | 2024-10-05 01:13:00 | 44.3 | 0.40 |
| 1201555171 | 2024-10-05 12:40:00 | 56.2 | 0.63 |
| 1201555171 | 2024-10-05 19:00:00 | 53.4 | 0.57 |
| 1201555171 | 2024-10-06 01:07:00 | 44.7 | 0.45 |
| 1201555171 | 2024-10-06 06:29:00 | 38.2 | 0.34 |
| 1401554006 | 2024-01-15 18:16:00 | 41.4 | 0.39 |
| 1401554006 | 2024-01-16 05:37:00 | 43.8 | 0.39 |
| 1401591974 | 2024-02-08 03:45:00 | 70.3 | 0.70 |
| 1401591974 | 2024-02-10 17:55:00 | 44.5 | 0.40 |
| 1401591974 | 2024-02-12 05:09:00 | 53.4 | 0.50 |
| 1401611898 | 2024-04-11 20:24:00 | 46.9 | 0.40 |
| 1401611898 | 2024-04-12 05:14:00 | 41.9 | 0.40 |
| 1401611898 | 2024-04-12 12:44:00 | 43.7 | 0.40 |
| 1401689750 | 2024-04-22 05:22:00 | 60.2 | 0.60 |
| 1401689750 | 2024-04-23 05:38:00 | 45.7 | 0.50 |
| 1401689750 | 2024-04-24 04:17:00 | 39.8 | 0.40 |
| 1401689750 | 2024-04-25 04:24:00 | 39.4 | 0.40 |
| 1401696145 | 2024-05-07 19:31:00 | 47.0 | 0.40 |
| 1401697961 | 2024-04-29 19:21:00 | 33.8 | 0.30 |
| 1401707171 | 2024-05-10 19:23:00 | 39.4 | 0.50 |
| 1401707171 | 2024-05-11 04:21:00 | 34.0 | 0.30 |
| 1401707171 | 2024-05-11 11:42:00 | 30.7 | 0.30 |
| 1401707171 | 2024-05-12 07:19:00 | 34.4 | 0.40 |
| 1401707171 | 2024-05-12 22:13:00 | 35.1 | 0.40 |
| 1401707171 | 2024-05-13 03:56:00 | 35.5 | 0.40 |
| 1401707171 | 2024-05-13 21:40:00 | 28.6 | 0.30 |
| 1401796928 | 2024-07-25 18:01:00 | 43.9 | 0.51 |
| 1401848048 | 2024-09-10 01:40:00 | 48.4 | 0.43 |
| 1401848048 | 2024-09-10 06:43:00 | 53.5 | 0.50 |
| 1401848048 | 2024-09-10 12:27:00 | 53.2 | 0.54 |
| 1401991907 | 2024-12-09 19:11:00 | 40.2 | 0.36 |
| 1401991907 | 2024-12-10 00:53:00 | 40.0 | 0.37 |
| 1401991907 | 2024-12-10 06:26:00 | 36.4 | 0.35 |
| 1401991907 | 2024-12-10 18:34:00 | 38.6 | 0.38 |
## Adding missing grouping variables: `mrn`, `lab_result_time`
## # A tibble: 1 × 2
## mean_aptt mean_antiXa
## <dbl> <dbl>
## 1 51.4 0.500
| mrn | n |
|---|---|
| 1001491594 | 2 |
## # A tibble: 7 × 3
## # Groups: lab_result_time, unusual_type [7]
## lab_result_time unusual_type n
## <dttm> <fct> <int>
## 1 2024-08-20 04:09:00 aPTT < antiXa 1
## 2 2024-08-20 10:16:00 aPTT < antiXa 1
## 3 2024-08-20 21:41:00 aPTT < antiXa 1
## 4 2024-08-21 05:17:00 aPTT < antiXa 1
## 5 2024-08-22 09:33:00 aPTT < antiXa 1
## 6 2024-08-23 05:28:00 concordant 1
## 7 2024-08-24 22:45:00 aPTT > antiXa 1
Study ID 5 (MRN 1001491594) had both discordance types (aPTT > antiXa and aPTT < antiXa).
Perhaps it would be worth retaining this patient in the model, as discordance could contribute to hemorrhage and/or thrombosis in separate instances.
| unusual_type | n |
|---|---|
| concordant | 497 |
| aPTT > antiXa | 25 |
| aPTT < antiXa | 49 |
| name | concordant | aPTT > antiXa | aPTT < antiXa |
|---|---|---|---|
| n_labs | 497.00 | 25.00 | 49.00 |
| n_patients | 106.00 | 12.00 | 17.00 |
| median_age | 58.00 | 57.00 | 51.00 |
| iqr_age | 22.00 | 25.00 | 23.00 |
| male_pct | 65.19 | 80.00 | 55.10 |
| median_wt | 88.50 | 75.50 | 100.00 |
| iqr_wt | 29.60 | 8.40 | 17.90 |
| median_ht | 170.20 | 175.30 | 173.00 |
| iqr_ht | 15.20 | 12.90 | 17.80 |
| median_hours | 203.00 | 102.00 | 203.00 |
| iqr_hours | 229.00 | 6.00 | 88.00 |
| cticu_pct | 39.84 | 48.00 | 10.20 |
| ccu_pct | 35.41 | 4.00 | 51.02 |
| hrtccu_pct | 21.73 | 44.00 | 38.78 |
| micu_pct | 2.01 | 0.00 | 0.00 |
| vv_pct | 9.26 | 8.00 | 2.04 |
| va_pct | 71.23 | 88.00 | 81.63 |
| vva_pct | 2.41 | 0.00 | 0.00 |
| convert_pct | 17.10 | 4.00 | 16.33 |
| median_flow4 | 3.10 | 3.10 | 3.15 |
| iqr_flow4 | 0.70 | 0.10 | 0.80 |
| median_flow24 | 3.20 | 3.50 | 3.40 |
| iqr_flow24 | 0.70 | 0.30 | 0.70 |
| median_aptt | 37.40 | 89.50 | 44.70 |
| iqr_aptt | 14.90 | 43.10 | 16.00 |
| median_antixa | 0.19 | 0.33 | 0.43 |
| iqr_antixa | 0.18 | 0.24 | 0.16 |
| median_inr | 1.10 | 1.30 | 1.20 |
| iqr_inr | 0.20 | 0.45 | 0.30 |
| median_fibrinogen | 506.00 | 465.00 | 292.00 |
| iqr_fibrinogen | 387.00 | 50.00 | 245.00 |
| median_heparin_dose | 9.00 | 9.00 | 9.00 |
| iqr_heparin_dose | 7.00 | 8.50 | 6.00 |
| median_nearest_bilirubin | 1.10 | 1.20 | 0.90 |
| iqr_nearest_bilirubin | 1.30 | 0.60 | 0.90 |
| variable | kruskal_p | statistic | n_concordant | n_aPTT > antiXa | n_aPTT < antiXa | median_concordant | median_aPTT > antiXa | median_aPTT < antiXa | IQR_concordant | IQR_aPTT > antiXa | IQR_aPTT < antiXa | group1 | group2 | p.value |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| heparin_assay_quantitative | 0.000 | 111.132 | 106 | 12 | 17 | 0.19 | 0.33 | 0.43 | 0.18 | 0.24 | 0.16 | aPTT > antiXa | concordant | 0.008 |
| heparin_assay_quantitative | 0.000 | 111.132 | 106 | 12 | 17 | 0.19 | 0.33 | 0.43 | 0.18 | 0.24 | 0.16 | aPTT < antiXa | concordant | 0.000 |
| heparin_assay_quantitative | 0.000 | 111.132 | 106 | 12 | 17 | 0.19 | 0.33 | 0.43 | 0.18 | 0.24 | 0.16 | aPTT < antiXa | aPTT > antiXa | 0.000 |
| activated_partial_thromboplastin_time | 0.000 | 75.804 | 106 | 12 | 17 | 37.40 | 89.50 | 44.70 | 14.90 | 43.10 | 16.00 | aPTT > antiXa | concordant | 0.000 |
| activated_partial_thromboplastin_time | 0.000 | 75.804 | 106 | 12 | 17 | 37.40 | 89.50 | 44.70 | 14.90 | 43.10 | 16.00 | aPTT < antiXa | concordant | 0.000 |
| activated_partial_thromboplastin_time | 0.000 | 75.804 | 106 | 12 | 17 | 37.40 | 89.50 | 44.70 | 14.90 | 43.10 | 16.00 | aPTT < antiXa | aPTT > antiXa | 0.000 |
| international_normalization_ratio | 0.000 | 29.635 | 106 | 12 | 17 | 1.10 | 1.30 | 1.20 | 0.20 | 0.45 | 0.30 | aPTT > antiXa | concordant | 0.000 |
| international_normalization_ratio | 0.000 | 29.635 | 106 | 12 | 17 | 1.10 | 1.30 | 1.20 | 0.20 | 0.45 | 0.30 | aPTT < antiXa | concordant | 0.053 |
| international_normalization_ratio | 0.000 | 29.635 | 106 | 12 | 17 | 1.10 | 1.30 | 1.20 | 0.20 | 0.45 | 0.30 | aPTT < antiXa | aPTT > antiXa | 0.006 |
| weight | 0.000 | 28.745 | 106 | 12 | 17 | 88.50 | 75.50 | 100.00 | 29.60 | 8.40 | 17.90 | aPTT > antiXa | concordant | 0.096 |
| weight | 0.000 | 28.745 | 106 | 12 | 17 | 88.50 | 75.50 | 100.00 | 29.60 | 8.40 | 17.90 | aPTT < antiXa | concordant | 0.000 |
| weight | 0.000 | 28.745 | 106 | 12 | 17 | 88.50 | 75.50 | 100.00 | 29.60 | 8.40 | 17.90 | aPTT < antiXa | aPTT > antiXa | 0.000 |
| hours_ecmo | 0.000 | 22.120 | 106 | 12 | 17 | 203.00 | 102.00 | 203.00 | 229.00 | 6.00 | 88.00 | aPTT > antiXa | concordant | 0.000 |
| hours_ecmo | 0.000 | 22.120 | 106 | 12 | 17 | 203.00 | 102.00 | 203.00 | 229.00 | 6.00 | 88.00 | aPTT < antiXa | concordant | 0.084 |
| hours_ecmo | 0.000 | 22.120 | 106 | 12 | 17 | 203.00 | 102.00 | 203.00 | 229.00 | 6.00 | 88.00 | aPTT < antiXa | aPTT > antiXa | 0.000 |
| fibrinogen | 0.006 | 10.076 | 106 | 12 | 17 | 506.00 | 465.00 | 292.00 | 387.00 | 50.00 | 245.00 | aPTT > antiXa | concordant | 0.404 |
| fibrinogen | 0.006 | 10.076 | 106 | 12 | 17 | 506.00 | 465.00 | 292.00 | 387.00 | 50.00 | 245.00 | aPTT < antiXa | concordant | 0.007 |
| fibrinogen | 0.006 | 10.076 | 106 | 12 | 17 | 506.00 | 465.00 | 292.00 | 387.00 | 50.00 | 245.00 | aPTT < antiXa | aPTT > antiXa | 0.075 |
| height | 0.048 | 6.084 | 106 | 12 | 17 | 170.20 | 175.30 | 173.00 | 15.20 | 12.90 | 17.80 | aPTT > antiXa | concordant | 0.042 |
| height | 0.048 | 6.084 | 106 | 12 | 17 | 170.20 | 175.30 | 173.00 | 15.20 | 12.90 | 17.80 | aPTT < antiXa | concordant | 0.702 |
| height | 0.048 | 6.084 | 106 | 12 | 17 | 170.20 | 175.30 | 173.00 | 15.20 | 12.90 | 17.80 | aPTT < antiXa | aPTT > antiXa | 0.145 |
| heparin_infusion_dose_value_units_kg_hr | 0.075 | 5.182 | 106 | 12 | 17 | 9.00 | 9.00 | 9.00 | 7.00 | 8.50 | 6.00 | aPTT > antiXa | concordant | 0.818 |
| heparin_infusion_dose_value_units_kg_hr | 0.075 | 5.182 | 106 | 12 | 17 | 9.00 | 9.00 | 9.00 | 7.00 | 8.50 | 6.00 | aPTT < antiXa | concordant | 0.080 |
| heparin_infusion_dose_value_units_kg_hr | 0.075 | 5.182 | 106 | 12 | 17 | 9.00 | 9.00 | 9.00 | 7.00 | 8.50 | 6.00 | aPTT < antiXa | aPTT > antiXa | 0.818 |
| pump_flow24 | 0.115 | 4.329 | 106 | 12 | 17 | 3.20 | 3.50 | 3.40 | 0.70 | 0.30 | 0.70 | aPTT > antiXa | concordant | 0.713 |
| pump_flow24 | 0.115 | 4.329 | 106 | 12 | 17 | 3.20 | 3.50 | 3.40 | 0.70 | 0.30 | 0.70 | aPTT < antiXa | concordant | 0.133 |
| pump_flow24 | 0.115 | 4.329 | 106 | 12 | 17 | 3.20 | 3.50 | 3.40 | 0.70 | 0.30 | 0.70 | aPTT < antiXa | aPTT > antiXa | 0.713 |
| nearest_bilirubin | 0.186 | 3.362 | 106 | 12 | 17 | 1.10 | 1.20 | 0.90 | 1.30 | 0.60 | 0.90 | aPTT > antiXa | concordant | 0.230 |
| nearest_bilirubin | 0.186 | 3.362 | 106 | 12 | 17 | 1.10 | 1.20 | 0.90 | 1.30 | 0.60 | 0.90 | aPTT < antiXa | concordant | 0.527 |
| nearest_bilirubin | 0.186 | 3.362 | 106 | 12 | 17 | 1.10 | 1.20 | 0.90 | 1.30 | 0.60 | 0.90 | aPTT < antiXa | aPTT > antiXa | 0.047 |
| age_years | 0.570 | 1.123 | 106 | 12 | 17 | 58.00 | 57.00 | 51.00 | 22.00 | 25.00 | 23.00 | aPTT > antiXa | concordant | 1.000 |
| age_years | 0.570 | 1.123 | 106 | 12 | 17 | 58.00 | 57.00 | 51.00 | 22.00 | 25.00 | 23.00 | aPTT < antiXa | concordant | 0.842 |
| age_years | 0.570 | 1.123 | 106 | 12 | 17 | 58.00 | 57.00 | 51.00 | 22.00 | 25.00 | 23.00 | aPTT < antiXa | aPTT > antiXa | 1.000 |
| pump_flow4 | 0.780 | 0.496 | 106 | 12 | 17 | 3.10 | 3.10 | 3.15 | 0.70 | 0.10 | 0.80 | aPTT > antiXa | concordant | 1.000 |
| pump_flow4 | 0.780 | 0.496 | 106 | 12 | 17 | 3.10 | 3.10 | 3.15 | 0.70 | 0.10 | 0.80 | aPTT < antiXa | concordant | 1.000 |
| pump_flow4 | 0.780 | 0.496 | 106 | 12 | 17 | 3.10 | 3.10 | 3.15 | 0.70 | 0.10 | 0.80 | aPTT < antiXa | aPTT > antiXa | 1.000 |
##
## concordant aPTT > antiXa aPTT < antiXa
## ccu 284 12 44
## cticu 198 12 5
## micu 10 0 0
##
## Fisher's Exact Test for Count Data
##
## data: table_locations
## p-value = 0.0001257
## alternative hypothesis: two.sided
##
## concordant aPTT > antiXa aPTT < antiXa
## Cardiac 385 20 48
## ECPR 32 3 0
## Pulmonary 80 2 1
##
## Fisher's Exact Test for Count Data
##
## data: table_support
## p-value = 0.002629
## alternative hypothesis: two.sided
## mode
## unusual_type VA VV
## concordant 354 46
## aPTT > antiXa 22 2
## aPTT < antiXa 40 1
##
## Fisher's Exact Test for Count Data
##
## data: .
## p-value = 0.1939
## alternative hypothesis: two.sided
# safety check to ensure only including labs that were measured after ecmo start or before 7 days following ECMO stop
model_fit_data %>%
filter(lab_result_time < time_on | lab_result_time > complication_7day_assessment)
## # A tibble: 0 × 139
## # ℹ 139 variables: study_id <int>, mrn <chr>, patient_name <chr>,
## # time_on <dttm>, time_off <dttm>, time_off_true <dttm>,
## # complication_7day_assessment <dttm>, duration_to_lab <dbl>,
## # patient_id <chr>, run_id <chr>, lab_result_time <dttm>,
## # department_name <fct>, heparin_infusion_dose_value_units_kg_hr <dbl>,
## # concordance_classic <fct>, concordance_low <fct>,
## # concordance_classic_simple <fct>, concordance_low_simple <fct>, …
## check shows no data -> all is okay
#safety check to ensure only including complications that were measured after ecmo start or before 7 days following ECMO stop
model_fit_data %>%
pivot_longer(
death_date:ich_based_on_imaging_findings,
names_to = "complication",
values_to = "time_complication") %>%
filter(time_complication < time_on | time_complication > complication_7day_assessment)
## # A tibble: 0 × 98
## # ℹ 98 variables: study_id <int>, mrn <chr>, patient_name <chr>,
## # time_on <dttm>, time_off <dttm>, time_off_true <dttm>,
## # complication_7day_assessment <dttm>, duration_to_lab <dbl>,
## # patient_id <chr>, run_id <chr>, lab_result_time <dttm>,
## # department_name <fct>, heparin_infusion_dose_value_units_kg_hr <dbl>,
## # concordance_classic <fct>, concordance_low <fct>,
## # concordance_classic_simple <fct>, concordance_low_simple <fct>, …
## check shows no data -> all is okay
Complications are assessed only if they occur after a lab (discordance) result time and before 7 days after ECMO stop.
Created composite hemorrhagic and thrombotic outcomes, grouped as below.
hemorrhage_any = Any Hemorrhagic Complication
neurologic_intra_extra_parenchymal_cns_hemorrhage_us_or_ct_or_mri
hemorrhagic_gi_hemorrhage
major_bleeding_perfusion
gi_bleeding_present_on_cta_and_confirmed_via_endoscopy***
ich_based_on_imaging_findings***
Not included in hemorrhage composite as unlikely to be biologically related to discordance:
hemorrhagic_peripheral_cannulation_site_bleeding
hemorrhagic_surgical_site_bleeding
hemorrhagic_mediastinal_cannulation_site_bleeding
pulmonary_pulmonary_hemorrhage
thrombosis_any = Thrombotic Complications *
neurologic_cns_infarction_us_or_ct_or_mri
limb_ischemia
mechanical_thrombosis_clots_circuit_component
circuit_thrombosis_perfusion
dvt_pe_1_time_and_date***
ischemic_stroke_1_time_and_date***
acute_limb_ischemia_1_time_and_date***
not included in thrombosis composite as unlikely to be biologically related to discordance:
neurologic_cns_diffuse_ischemia_ct_mri
limb_fasciotomy
*** = complications as reviewed manually by Phil/Connie
Skipped as could violate causal time pathway between discordance -> complication
dvt_pe_2_time_and_date
dvt_pe_3_time_and_date
dvt_pe_4_time_and_date
acute_limb_ischemia_2_time_and_date
acute_limb_ischemia_3_time_and_date
ischemic_stroke_2_time_and_date
ischemic_stroke_3_time_and_date
## # A tibble: 3 × 4
## unusual_type n hemorrhage_rate thrombosis_rate
## <fct> <int> <dbl> <dbl>
## 1 concordant 497 7.24 29.8
## 2 aPTT > antiXa 25 8 20
## 3 aPTT < antiXa 49 0 24.5
##
## Call: glm(formula = hemorrhage_any ~ unusual_type, family = binomial,
## data = model_fit_complications)
##
## Coefficients:
## (Intercept) unusual_typeaPTT > antiXa
## -2.5499 0.1075
## unusual_typeaPTT < antiXa
## -16.0162
##
## Degrees of Freedom: 570 Total (i.e. Null); 568 Residual
## Null Deviance: 279.4
## Residual Deviance: 272.3 AIC: 278.3
##
## Call:
## glm(formula = hemorrhage_any ~ unusual_type, family = binomial,
## data = model_fit_complications)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -0.4084 -0.3878 -0.3878 -0.3878 2.2913
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.5499 0.1731 -14.735 <2e-16 ***
## unusual_typeaPTT > antiXa 0.1075 0.7572 0.142 0.887
## unusual_typeaPTT < antiXa -16.0162 931.8055 -0.017 0.986
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 279.36 on 570 degrees of freedom
## Residual deviance: 272.27 on 568 degrees of freedom
## AIC: 278.27
##
## Number of Fisher Scoring iterations: 17
##
## Call: glm(formula = thrombosis_any ~ unusual_type, family = binomial,
## data = model_fit_complications)
##
## Coefficients:
## (Intercept) unusual_typeaPTT > antiXa
## -0.8579 -0.5284
## unusual_typeaPTT < antiXa
## -0.2682
##
## Degrees of Freedom: 570 Total (i.e. Null); 568 Residual
## Null Deviance: 686.6
## Residual Deviance: 684.9 AIC: 690.9
##
## Call:
## glm(formula = thrombosis_any ~ unusual_type, family = binomial,
## data = model_fit_complications)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -0.8408 -0.8408 -0.8408 1.5565 1.7941
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.85786 0.09809 -8.745 <2e-16 ***
## unusual_typeaPTT > antiXa -0.52843 0.50953 -1.037 0.300
## unusual_typeaPTT < antiXa -0.26815 0.34638 -0.774 0.439
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 686.6 on 570 degrees of freedom
## Residual deviance: 684.9 on 568 degrees of freedom
## AIC: 690.9
##
## Number of Fisher Scoring iterations: 4
Variables which would be important to adjust for based on opinion / intentional selection:
duration_to_lab (time_on ->
lab_result_time)
international_normalization_ratio
fibrinogen
nearest_bilirubin
weight - significant as identified with
between-group testing
heparin_infusion_dose_value_units_kg_hr
Variables which specifically were not incorporated into the model as they were not between-group significant or had other good reasons:
pump_flow4 and pump_flow24 -
specifically not chosen as they were not significantly different between
groups in descriptive analyses, despite potentially functioning as
marker of baseline disease severity (higher flow, sicker). We do not
know illness severity and underlying disease process in this
retrospective cohort study.
mode -> inclusion of this model caused model to
possibly overfit AND our underlying premise is that discordance matters,
regardless of why you are on ECMO or how it is cannulated
##
## Call:
## glm(formula = hemorrhage_any ~ unusual_type + duration_to_lab +
## international_normalization_ratio + fibrinogen + nearest_bilirubin +
## weight + heparin_infusion_dose_value_units_kg_hr, family = binomial,
## data = model_fit_complications)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -0.95341 -0.35474 -0.18971 -0.06547 3.04070
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.272e-01 2.850e+00 0.115 0.90860
## unusual_typeaPTT > antiXa -1.855e+01 4.765e+03 -0.004 0.99689
## unusual_typeaPTT < antiXa -1.714e+01 2.176e+03 -0.008 0.99372
## duration_to_lab -1.630e-03 4.079e-03 -0.399 0.68954
## international_normalization_ratio 1.760e+00 2.002e+00 0.879 0.37929
## fibrinogen -4.754e-04 1.829e-03 -0.260 0.79491
## nearest_bilirubin -5.431e-01 4.820e-01 -1.127 0.25984
## weight -6.632e-02 2.149e-02 -3.086 0.00203
## heparin_infusion_dose_value_units_kg_hr 1.866e-01 9.282e-02 2.010 0.04443
##
## (Intercept)
## unusual_typeaPTT > antiXa
## unusual_typeaPTT < antiXa
## duration_to_lab
## international_normalization_ratio
## fibrinogen
## nearest_bilirubin
## weight **
## heparin_infusion_dose_value_units_kg_hr *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 86.459 on 167 degrees of freedom
## Residual deviance: 58.872 on 159 degrees of freedom
## (403 observations deleted due to missingness)
## AIC: 76.872
##
## Number of Fisher Scoring iterations: 18
## # A tibble: 9 × 8
## term OR conf.low conf.high p_raw p_fdr p_holm p_bonf
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 (Intercept) 1.39e+0 0.00715 9.83e+ 2 0.909 0.997 1 1
## 2 unusual_typeaPTT > an… 8.82e-9 NA 8.25e+111 0.997 0.997 1 1
## 3 unusual_typeaPTT < an… 3.61e-8 NA 6.56e+ 98 0.994 0.997 1 1
## 4 duration_to_lab 9.98e-1 0.990 1.01e+ 0 0.690 0.997 1 1
## 5 international_normali… 5.81e+0 0.0320 2.06e+ 2 0.379 0.853 1 1
## 6 fibrinogen 1.00e+0 0.996 1.00e+ 0 0.795 0.997 1 1
## 7 nearest_bilirubin 5.81e-1 0.176 1.15e+ 0 0.260 0.780 1 1
## 8 weight 9.36e-1 0.892 9.73e- 1 0.00203 0.0183 0.0183 0.0183
## 9 heparin_infusion_dose… 1.21e+0 1.02 1.47e+ 0 0.0444 0.200 0.355 0.400
## [1] TRUE
##
## FALSE TRUE
## concordant 461 36
## aPTT > antiXa 23 2
## aPTT < antiXa 49 0
| term | estimate | OR | conf.low | conf.high | p_raw | p_fdr | p_holm | p_bonf |
|---|---|---|---|---|---|---|---|---|
| (Intercept) | -0.3433193 | 0.7094117 | 0.0076576 | 174.5594215 | 0.8833867 | 0.8833867 | 1.0000000 | 1.0000000 |
| unusual_typeaPTT > antiXa | -1.4025594 | 0.2459666 | 0.0016277 | 3.7119763 | 0.3459936 | 0.5724862 | 1.0000000 | 1.0000000 |
| unusual_typeaPTT < antiXa | -1.5308883 | 0.2163434 | 0.0015229 | 2.5968161 | 0.2605913 | 0.5724862 | 1.0000000 | 1.0000000 |
| duration_to_lab | -0.0013108 | 0.9986901 | 0.9910301 | 1.0061299 | 0.7191129 | 0.8679572 | 1.0000000 | 1.0000000 |
| international_normalization_ratio | 1.7887981 | 5.9822578 | 0.0880061 | 93.4958176 | 0.2778252 | 0.5724862 | 1.0000000 | 1.0000000 |
| fibrinogen | -0.0004927 | 0.9995075 | 0.9960290 | 1.0028742 | 0.7715176 | 0.8679572 | 1.0000000 | 1.0000000 |
| nearest_bilirubin | -0.2813193 | 0.7547873 | 0.2539487 | 1.2542681 | 0.3816575 | 0.5724862 | 1.0000000 | 1.0000000 |
| weight | -0.0559555 | 0.9455812 | 0.9067682 | 0.9786838 | 0.0011382 | 0.0102441 | 0.0102441 | 0.0102441 |
| heparin_infusion_dose_value_units_kg_hr | 0.1550819 | 1.1677536 | 1.0008041 | 1.3989759 | 0.0487685 | 0.2194585 | 0.3901484 | 0.4389169 |
##
## Call:
## glm(formula = thrombosis_any ~ unusual_type + duration_to_lab +
## international_normalization_ratio + fibrinogen + nearest_bilirubin +
## weight + heparin_infusion_dose_value_units_kg_hr, family = binomial,
## data = model_fit_complications)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.2838 -0.8052 -0.4360 0.9466 2.3720
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 7.923e-01 1.905e+00 0.416 0.677504
## unusual_typeaPTT > antiXa -1.491e+01 1.057e+03 -0.014 0.988744
## unusual_typeaPTT < antiXa 1.535e+00 5.958e-01 2.576 0.009999
## duration_to_lab -7.948e-03 3.555e-03 -2.236 0.025352
## international_normalization_ratio -9.588e-01 1.277e+00 -0.751 0.452690
## fibrinogen -9.503e-04 9.149e-04 -1.039 0.298985
## nearest_bilirubin 6.320e-02 1.291e-01 0.490 0.624394
## weight 2.538e-02 1.020e-02 2.487 0.012881
## heparin_infusion_dose_value_units_kg_hr -2.111e-01 6.172e-02 -3.421 0.000625
##
## (Intercept)
## unusual_typeaPTT > antiXa
## unusual_typeaPTT < antiXa **
## duration_to_lab *
## international_normalization_ratio
## fibrinogen
## nearest_bilirubin
## weight *
## heparin_infusion_dose_value_units_kg_hr ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 202.82 on 167 degrees of freedom
## Residual deviance: 161.90 on 159 degrees of freedom
## (403 observations deleted due to missingness)
## AIC: 179.9
##
## Number of Fisher Scoring iterations: 15
## # A tibble: 9 × 8
## term OR conf.low conf.high p_raw p_fdr p_holm p_bonf
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 (Intercept) 2.21e+0 0.0589 1.25e+ 2 6.78e-1 0.762 1 1
## 2 unusual_typeaPTT >… 3.34e-7 NA 3.86e+40 9.89e-1 0.989 1 1
## 3 unusual_typeaPTT <… 4.64e+0 1.48 1.58e+ 1 1.00e-2 0.0386 0.0800 0.0900
## 4 duration_to_lab 9.92e-1 0.985 9.99e- 1 2.54e-2 0.0570 0.152 0.228
## 5 international_norm… 3.83e-1 0.0222 4.07e+ 0 4.53e-1 0.679 1 1
## 6 fibrinogen 9.99e-1 0.997 1.00e+ 0 2.99e-1 0.538 1 1
## 7 nearest_bilirubin 1.07e+0 0.809 1.36e+ 0 6.24e-1 0.762 1 1
## 8 weight 1.03e+0 1.01 1.05e+ 0 1.29e-2 0.0386 0.0902 0.116
## 9 heparin_infusion_d… 8.10e-1 0.712 9.08e- 1 6.25e-4 0.00562 0.00562 0.00562
## [1] TRUE
##
## FALSE TRUE
## concordant 349 148
## aPTT > antiXa 20 5
## aPTT < antiXa 37 12
| term | estimate | OR | conf.low | conf.high | p_raw | p_fdr | p_holm | p_bonf |
|---|---|---|---|---|---|---|---|---|
| (Intercept) | 0.5711221 | 1.7702523 | 0.0636170 | 78.0228078 | 0.7395729 | 0.7395729 | 1.0000000 | 1.0000000 |
| unusual_typeaPTT > antiXa | -0.9044852 | 0.4047502 | 0.0028646 | 4.8988140 | 0.5295111 | 0.6458176 | 1.0000000 | 1.0000000 |
| unusual_typeaPTT < antiXa | 1.4142557 | 4.1134236 | 1.3896933 | 13.1030905 | 0.0105315 | 0.0315946 | 0.0737208 | 0.0947839 |
| duration_to_lab | -0.0073136 | 0.9927131 | 0.9857088 | 0.9990152 | 0.0225682 | 0.0507784 | 0.1354091 | 0.2031137 |
| international_normalization_ratio | -0.7172546 | 0.4880904 | 0.0344035 | 3.9240558 | 0.5050279 | 0.6458176 | 1.0000000 | 1.0000000 |
| fibrinogen | -0.0009463 | 0.9990542 | 0.9973141 | 1.0007867 | 0.2826555 | 0.5087799 | 1.0000000 | 1.0000000 |
| nearest_bilirubin | 0.0690156 | 1.0714529 | 0.8252018 | 1.3400198 | 0.5740601 | 0.6458176 | 1.0000000 | 1.0000000 |
| weight | 0.0228787 | 1.0231424 | 1.0057828 | 1.0452472 | 0.0070683 | 0.0315946 | 0.0565466 | 0.0636149 |
| heparin_infusion_dose_value_units_kg_hr | -0.1930360 | 0.8244523 | 0.7286367 | 0.9196479 | 0.0003226 | 0.0029033 | 0.0029033 | 0.0029033 |
Standard logistic regression had high separation based on discordance type, likely due to uncommon outcome among a relatively small sample size with several critical covariables. Thus, Firth penalized logistic regression used to compute odds ratios and p-values.
| first_discord_type | n_patients | throm_events | bleed_events | median_throm_fu | iqr_throm_fu | median_bleed_fu | iqr_bleed_fu |
|---|---|---|---|---|---|---|---|
| concordant | 85 | 37 | 5 | 10.12 | 6.63 | 12.07 | 5.36 |
| aPTT < antiXa | 17 | 4 | 0 | 13.02 | 6.79 | 13.99 | 4.17 |
| aPTT > antiXa | 11 | 3 | 2 | 11.28 | 4.35 | 11.42 | 4.47 |
##
## ### Thrombosis follow-up by discordance group (days)
| first_discord_type | n | n_events | min_days | median_days | iqr_days | max_days |
|---|---|---|---|---|---|---|
| concordant | 85 | 37 | 0.32 | 10.12 | 6.63 | 35.13 |
| aPTT < antiXa | 17 | 4 | 3.71 | 13.02 | 6.79 | 21.81 |
| aPTT > antiXa | 11 | 3 | 2.10 | 11.28 | 4.35 | 24.45 |
##
## ### Hemorrhage follow-up by discordance group (days)
| first_discord_type | n | n_events | min_days | median_days | iqr_days | max_days |
|---|---|---|---|---|---|---|
| concordant | 85 | 5 | 0.95 | 12.07 | 5.36 | 45.00 |
| aPTT < antiXa | 17 | 0 | 7.85 | 13.99 | 4.17 | 21.81 |
| aPTT > antiXa | 11 | 2 | 4.03 | 11.42 | 4.47 | 24.45 |
## Warning in agreg.fit(X, Y, istrat, offset, init, control, weights = weights, :
## Loglik converged before variable 1,2 ; beta may be infinite.
| term | HR | conf.low | conf.high | p_raw | p_fdr | p_holm | p_bonf |
|---|---|---|---|---|---|---|---|
| discord_groupaPTT < antiXa | 0.0000000 | 0.0000000 | Inf | 0.9994307 | 0.9996375 | 1 | 1 |
| discord_groupaPTT > antiXa | 0.0000000 | 0.0000000 | Inf | 0.9996375 | 0.9996375 | 1 | 1 |
| international_normalization_ratio | 3.4980108 | 0.0301047 | 406.450973 | 0.6057755 | 0.9996375 | 1 | 1 |
| fibrinogen | 1.0007928 | 0.9927555 | 1.008895 | 0.8472436 | 0.9996375 | 1 | 1 |
| nearest_bilirubin | 0.7193910 | 0.1522141 | 3.399971 | 0.6776842 | 0.9996375 | 1 | 1 |
| weight | 0.9946069 | 0.9507747 | 1.040460 | 0.8140833 | 0.9996375 | 1 | 1 |
| heparin_infusion_dose_value_units_kg_hr | 0.8989018 | 0.6040018 | 1.337785 | 0.5993073 | 0.9996375 | 1 | 1 |
## Warning in agreg.fit(X, Y, istrat, offset, init, control, weights = weights, :
## Loglik converged before variable 2 ; beta may be infinite.
| term | HR | conf.low | conf.high | p_raw | p_fdr | p_holm | p_bonf |
|---|---|---|---|---|---|---|---|
| discord_groupaPTT < antiXa | 3.7395981 | 0.7044141 | 19.852803 | 0.1214825 | 0.8503777 | 0.8503777 | 0.8503777 |
| discord_groupaPTT > antiXa | 0.0000000 | 0.0000000 | Inf | 0.9987796 | 0.9987796 | 1.0000000 | 1.0000000 |
| international_normalization_ratio | 0.3468166 | 0.0063948 | 18.809301 | 0.6032381 | 0.9987796 | 1.0000000 | 1.0000000 |
| fibrinogen | 1.0005290 | 0.9958734 | 1.005206 | 0.8241215 | 0.9987796 | 1.0000000 | 1.0000000 |
| nearest_bilirubin | 1.3496789 | 0.7470154 | 2.438548 | 0.3204361 | 0.9987796 | 1.0000000 | 1.0000000 |
| weight | 0.9907330 | 0.9651273 | 1.017018 | 0.4858824 | 0.9987796 | 1.0000000 | 1.0000000 |
| heparin_infusion_dose_value_units_kg_hr | 1.0169592 | 0.8198471 | 1.261462 | 0.8784124 | 0.9987796 | 1.0000000 | 1.0000000 |
##
## ### Hazard ratios — Bleeding (adjusted)
| Term | HR | CI_low | CI_high | HR (95% CI) | p | p (FDR) |
|---|---|---|---|---|---|---|
| discord_groupaPTT < antiXa | 0.00 | 0.00 | Inf | 0.00 (0.00–Inf) | 0.999 | 1 |
| discord_groupaPTT > antiXa | 0.00 | 0.00 | Inf | 0.00 (0.00–Inf) | 1.000 | 1 |
| fibrinogen | 1.00 | 0.99 | 1.01 | 1.00 (0.99–1.01) | 0.847 | 1 |
| heparin_infusion_dose_value_units_kg_hr | 0.90 | 0.60 | 1.34 | 0.90 (0.60–1.34) | 0.599 | 1 |
| international_normalization_ratio | 3.50 | 0.03 | 406.45 | 3.50 (0.03–406.45) | 0.606 | 1 |
| nearest_bilirubin | 0.72 | 0.15 | 3.40 | 0.72 (0.15–3.40) | 0.678 | 1 |
| weight | 0.99 | 0.95 | 1.04 | 0.99 (0.95–1.04) | 0.814 | 1 |
##
##
## ### Hazard ratios — Thrombosis (adjusted)
| Term | HR | CI_low | CI_high | HR (95% CI) | p | p (FDR) |
|---|---|---|---|---|---|---|
| discord_groupaPTT < antiXa | 3.74 | 0.70 | 19.85 | 3.74 (0.70–19.85) | 0.121 | 0.850 |
| discord_groupaPTT > antiXa | 0.00 | 0.00 | Inf | 0.00 (0.00–Inf) | 0.999 | 0.999 |
| fibrinogen | 1.00 | 1.00 | 1.01 | 1.00 (1.00–1.01) | 0.824 | 0.999 |
| heparin_infusion_dose_value_units_kg_hr | 1.02 | 0.82 | 1.26 | 1.02 (0.82–1.26) | 0.878 | 0.999 |
| international_normalization_ratio | 0.35 | 0.01 | 18.81 | 0.35 (0.01–18.81) | 0.603 | 0.999 |
| nearest_bilirubin | 1.35 | 0.75 | 2.44 | 1.35 (0.75–2.44) | 0.320 | 0.999 |
| weight | 0.99 | 0.97 | 1.02 | 0.99 (0.97–1.02) | 0.486 | 0.999 |
Patients who had discordant labs but all of those labs were after clot/bleed or after censoring appear:
discordant in the demographics table,
but remain concordant in KM/Cox models.
## ### Summary counts (ever-discordant vs never)
| total | n_ever_discord | n_never_discord | clot_events_among_ever | clot_events_among_never |
|---|---|---|---|---|
| 113 | 28 | 85 | 7 | 37 |
##
## ### Events before vs after first discordance (counts)
| n_patients | n_events_total | events_before_first_discord | events_after_first_discord | events_in_never_discord |
|---|---|---|---|---|
| 65 | 44 | 0 | 7 | 37 |
##
## ### Events and person-time by discord_group in tv_thrombosis
| discord_group | n_intervals | n_events | total_time_days |
|---|---|---|---|
| concordant | 113 | 37 | 997.6623 |
| aPTT < antiXa | 17 | 4 | 149.6153 |
| aPTT > antiXa | 11 | 3 | 108.2854 |
##
## ### Kaplan–Meier (patient-level) by ever_discordant — summary:
## Call: survfit(formula = Surv(time_to_clot, event_clot) ~ ever_discord,
## data = pl_surv)
##
## ever_discord=ever_discordant
## time n.risk n.event survival std.err lower 95% CI upper 95% CI
## 2.10 28 1 0.964 0.0351 0.898 1.000
## 3.71 27 1 0.929 0.0487 0.838 1.000
## 5.52 26 1 0.893 0.0585 0.785 1.000
## 8.21 24 1 0.856 0.0668 0.734 0.997
## 8.65 23 1 0.818 0.0735 0.686 0.976
## 8.66 22 1 0.781 0.0790 0.641 0.953
## 9.25 21 1 0.744 0.0836 0.597 0.927
##
## ever_discord=never_discordant
## time n.risk n.event survival std.err lower 95% CI upper 95% CI
## 0.315 85 1 0.988 0.0117 0.966 1.000
## 1.242 84 1 0.976 0.0164 0.945 1.000
## 1.515 83 1 0.965 0.0200 0.926 1.000
## 1.526 82 1 0.953 0.0230 0.909 0.999
## 1.802 81 1 0.941 0.0255 0.892 0.993
## 2.528 80 1 0.929 0.0278 0.877 0.985
## 2.558 79 1 0.918 0.0298 0.861 0.978
## 2.681 78 1 0.906 0.0317 0.846 0.970
## 2.742 77 1 0.894 0.0334 0.831 0.962
## 2.797 76 1 0.882 0.0349 0.816 0.954
## 2.805 75 2 0.859 0.0378 0.788 0.936
## 2.898 73 1 0.847 0.0390 0.774 0.927
## 3.429 72 1 0.835 0.0402 0.760 0.918
## 3.935 71 1 0.824 0.0413 0.746 0.909
## 4.146 70 1 0.812 0.0424 0.733 0.899
## 4.279 69 1 0.800 0.0434 0.719 0.890
## 4.885 68 1 0.788 0.0443 0.706 0.880
## 4.914 67 1 0.776 0.0452 0.693 0.870
## 4.914 66 1 0.765 0.0460 0.680 0.860
## 5.660 65 1 0.753 0.0468 0.667 0.850
## 6.901 64 1 0.741 0.0475 0.654 0.840
## 6.933 63 1 0.729 0.0482 0.641 0.830
## 7.683 61 1 0.717 0.0489 0.628 0.820
## 7.685 60 1 0.705 0.0495 0.615 0.809
## 7.802 59 1 0.694 0.0501 0.602 0.799
## 7.963 58 1 0.682 0.0506 0.589 0.788
## 8.647 54 1 0.669 0.0512 0.576 0.777
## 9.463 48 1 0.655 0.0520 0.561 0.765
## 10.090 44 1 0.640 0.0529 0.544 0.753
## 10.871 38 1 0.623 0.0541 0.526 0.739
## 11.863 28 1 0.601 0.0566 0.500 0.723
## 13.624 21 1 0.572 0.0607 0.465 0.705
## 14.181 17 1 0.539 0.0658 0.424 0.685
## 14.565 15 1 0.503 0.0706 0.382 0.662
## 22.174 7 1 0.431 0.0899 0.286 0.649
## 30.098 3 1 0.287 0.1317 0.117 0.706
##
## ### Patients with clot before their first discordance (if any):
## None
##
## ### Interval-level events in tv_thrombosis:
| discord_group | n_intervals | events |
|---|---|---|
| aPTT < antiXa | 17 | 4 |
| aPTT > antiXa | 11 | 3 |
| concordant | 113 | 37 |
##
##
## --- Quick interpretation guide ---
## 1) If many clot events occur BEFORE first_discord_time, the time-varying Cox will not attribute those events to the discordant state.
## 2) If interval-level table (above) shows most events in 'concordant' intervals, that explains why Cox HR for discordance may be null or inverse.
## 3) With small total events, both logistic (ever vs never) and Cox can be unstable; check counts above.
death_date
mechanical_circuit_change
renal_creatinine_3_0
renal_creatinine_1_5_3_0
renal_renal_replacement_therapy_required
metabolic_moderate_hemolysis
major_hemolysis_perfusion
Note: composited renal failure types into
renal_failure_any
## # A tibble: 6 × 2
## # Groups: complication [6]
## complication n
## <chr> <int>
## 1 death_date 4
## 2 major_hemolysis_perfusion 1
## 3 mechanical_circuit_change 3
## 4 renal_creatinine_1_5_3_0 4
## 5 renal_creatinine_3_0 6
## 6 renal_renal_replacement_therapy_required 3
## # A tibble: 3 × 8
## term OR conf.low conf.high p_raw p_fdr p_holm p_bonf
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 (Intercept) 1.09e-1 8.04e- 2 1.45e-1 5.78e-49 1.73e-48 1.73e-48 1.73e-48
## 2 unusual_typea… 1.25e+0 2.88e- 1 3.77e+0 7.28e- 1 9.86e- 1 1 e+ 0 1 e+ 0
## 3 unusual_typea… 7.91e-8 1.05e-157 1.48e+7 9.86e- 1 9.86e- 1 1 e+ 0 1 e+ 0
| term | OR | conf.low | conf.high | p_raw | p_fdr | p_holm | p_bonf |
|---|---|---|---|---|---|---|---|
| (Intercept) | 2.990314e+22 | 2.130143e+09 | 3.222095e+53 | 0.0215302 | 0.0968861 | 0.1924164 | 0.1937722 |
| unusual_typeaPTT > antiXa | 2.176270e+08 | NA | Inf | 0.9987957 | 0.9991300 | 1.0000000 | 1.0000000 |
| unusual_typeaPTT < antiXa | 2.916260e-02 | NA | 1.283111e+119 | 0.9991300 | 0.9991300 | 1.0000000 | 1.0000000 |
| duration_to_lab | 1.039519e+00 | 1.005664e+00 | 1.131491e+00 | 0.1438863 | 0.2158295 | 0.5755453 | 1.0000000 |
| international_normalization_ratio | 0.000000e+00 | 0.000000e+00 | 1.790000e-05 | 0.0213796 | 0.0968861 | 0.1924164 | 0.1924164 |
| fibrinogen | 1.007144e+00 | 9.901896e-01 | 1.033750e+00 | 0.4558494 | 0.5860921 | 1.0000000 | 1.0000000 |
| nearest_bilirubin | 2.191107e-01 | 1.393990e-02 | 9.898349e-01 | 0.1129537 | 0.2033166 | 0.5647683 | 1.0000000 |
| weight | 8.528896e-01 | 6.663353e-01 | 9.560603e-01 | 0.0480300 | 0.1440900 | 0.3362099 | 0.4322699 |
| heparin_infusion_dose_value_units_kg_hr | 3.029280e-02 | 3.350000e-05 | 2.754372e-01 | 0.0817479 | 0.1839327 | 0.4904872 | 0.7357308 |
##
## Call:
## glm(formula = renal_failure_any ~ unusual_type, family = binomial,
## data = renal_failure_df)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -0.3078 -0.3078 -0.3078 -0.3078 2.5373
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -3.0257 0.2135 -14.171 <2e-16 ***
## unusual_typeaPTT > antiXa -0.1523 1.0427 -0.146 0.884
## unusual_typeaPTT < antiXa -15.5404 931.8055 -0.017 0.987
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 199.10 on 570 degrees of freedom
## Residual deviance: 194.68 on 568 degrees of freedom
## AIC: 200.68
##
## Number of Fisher Scoring iterations: 17
| term | OR | conf.low | conf.high | p_raw | p_fdr | p_holm | p_bonf |
|---|---|---|---|---|---|---|---|
| (Intercept) | 0.0868483 | 0.0001755 | 2.439515e+02 | 0.4467612 | 0.6701418 | 1.0000000 | 1.0000000 |
| unusual_typeaPTT > antiXa | 0.0000001 | NA | 3.569457e+178 | 0.9971348 | 0.9971348 | 1.0000000 | 1.0000000 |
| unusual_typeaPTT < antiXa | 0.0000001 | NA | 4.951939e+76 | 0.9938577 | 0.9971348 | 1.0000000 | 1.0000000 |
| duration_to_lab | 0.9610411 | 0.9169873 | 9.905843e-01 | 0.0399942 | 0.3599475 | 0.3599475 | 0.3599475 |
| international_normalization_ratio | 1.9594313 | 0.0047959 | 1.932384e+02 | 0.7706663 | 0.9908567 | 1.0000000 | 1.0000000 |
| fibrinogen | 1.0024116 | 0.9977341 | 1.007428e+00 | 0.3144818 | 0.6701418 | 1.0000000 | 1.0000000 |
| nearest_bilirubin | 0.6404395 | 0.1252000 | 1.446154e+00 | 0.4285536 | 0.6701418 | 1.0000000 | 1.0000000 |
| weight | 1.0298018 | 0.9824032 | 1.078525e+00 | 0.1773894 | 0.5321682 | 1.0000000 | 1.0000000 |
| heparin_infusion_dose_value_units_kg_hr | 0.7581412 | 0.5077302 | 1.064532e+00 | 0.1309924 | 0.5321682 | 1.0000000 | 1.0000000 |
Ultimately there are very few of these outcomes (except renal failure and death).
thrombotic and hemorrhagic events are common among ECMO patients
thrombotic events occurred frequently, despite heparin use in this sample
there is moderate correlation between aPTT and antiXa among heparinized ECMO aptients
initiation of ECMO induces a hypercoagulable state which is associated with thrombosis development
aPTT < antiXa is associated with increased risk of thrombosis compared to concordant and/or high aPTT > antiXa states (all patients with this state developed thrombosis in our study).
Likewise, aPTT < antiXa is associated with a decreased risk of hemorrhage.
the relative aPTT:antiXa value is more important than absolute values. Classifying discordance by range alone (i.e. within wide goal ranges) may not appropriately recognize hyper- or hypocoagulable states.
Comments on discrepancy between logistic and survival analyses
– If a patient is discordant late, their earlier follow-up counts as “non-exposed” in Cox.
– Logistic regression collapses all follow-up into a single binary exposure.
– Even with post-discordance events only, this leads to different denominators and risk attribution.